package com.hardware.enums;

/**
 * 爱迪尔 函数返回值
 *
 * @作者 韩宗森
 * @创建时间 2024年10月24日 19:35
 */
public enum AidierStatus implements HasKey {
    UNKNOWN_ERROR(-1, "未知错误!"),

    SUCCESS(0, "操作成功"),
    ERROR(1, "读写错误/数据错误"),
    DAMAGED(2, "卡已损坏"),
    NO_CARD(3, "无卡"),
    PORT_ERROR(4, "串口错误"),
    CARD_REPLACED(5, "卡被更换"),
    NOT_NEW_CARD(6, "不是新卡"),
    IS_NEW_CARD(7, "卡是新卡"),
    NOT_SYSTEM_CARD(8, "非本系统卡"),
    NOT_GUEST_CARD(9, "不是客人卡"),
    NOT_MEMBER_CARD(10, "不是会员卡"),
    PASSWORD_ERROR(11, "密码错误"),
    NO_OPEN_DOOR_RECORD(12, "无开门记录"),
    CARD_TYPE_ERROR(13, "卡型不正确"),
    PARAM_ERROR(14, "参数错误"),
    USER_CANCELS_OPERATION(15, "用户取消操作(按下<ESC>键)"),
    TIMEOUT(16, "等待超时"),
    CARD_INSERTION_ERROR(17, "插卡错误"),
    CARD_IS_BLANK(18, "卡是空白卡或插卡错误"),
    RESERVED(19, "保留(为向前兼容)"),
    NOT_INIT(20, "没有调用INIT函数"),
    NOT_VERSION_SUPPORT(21, "不支持该版本的门锁软件"),
    CONNECTION_ERROR(22, "连接(门锁系统数据库)错误"),
    DOOR_SYSTEM_NOT_EXIST(23, "门锁系统参数不存在"),
    INIT_FAILED(24, "初始化失败"),
    NO_GUESTS_EXIST(25, "没有客人在住/指定客人不存在"),
    ROOM_IS_FULL(26, "客房已满"),
    NO_CARD_RECORD(27, "没有此卡记录"),
    NOT_SETPORT(28, "没有调用SETPORT函数"),
    INVALID_ROOM_NUMBER(29, "无效的客房房号"),
    WRONG_TIME_RANGE(30, "错误的时间范围"),
    CARD_EXIST(31, "卡号已存在，无法登记（LOCK9200）"),
    NOT_SUPPORTED(32, "不支持调用"),
    INVALID_AUTHORIZATION_CODE(33, "无效的授权码，授权码错误或过期");

    // 状态码
    private Integer key;

    // 状态名称
    private String value;

    AidierStatus(Integer key, String value) {
        this.key = key;
        this.value = value;
    }

    public Integer getKey() {
        return this.key;
    }

    public String getValue() {
        return this.value;
    }

    // 根据Code获取Status枚举
    public static AidierStatus fromKey(Integer key) {
        for (AidierStatus status : AidierStatus.values()) {
            if (status.getKey().equals(key)) {
                return status;
            }
        }
        return null; // 如果没有匹配的code，则返回null
    }

    // 根据Code获取Name
    public static String getNameFromKey(Integer key) {
        AidierStatus status = fromKey(key);
        return status != null ? status.getValue() : null;
    }
}
